home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / tcl / tcl70b2.lha / tcl7.0b2 / tests / format.test < prev    next >
Text File  |  1993-07-17  |  14KB  |  380 lines

  1. # Commands covered:  format
  2. #
  3. # This file contains a collection of tests for one or more of the Tcl
  4. # built-in commands.  Sourcing this file into Tcl runs the tests and
  5. # generates output for errors.  No output means no errors were found.
  6. #
  7. # Copyright (c) 1991-1993 The Regents of the University of California.
  8. # All rights reserved.
  9. #
  10. # Permission is hereby granted, without written agreement and without
  11. # license or royalty fees, to use, copy, modify, and distribute this
  12. # software and its documentation for any purpose, provided that the
  13. # above copyright notice and the following two paragraphs appear in
  14. # all copies of this software.
  15. #
  16. # IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
  17. # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
  18. # OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
  19. # CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  20. #
  21. # THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
  22. # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  23. # AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  24. # ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
  25. # PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  26. #
  27. # $Header: /user6/ouster/tcl/tests/RCS/format.test,v 1.16 93/07/17 15:25:01 ouster Exp $ (Berkeley)
  28.  
  29. if {[string compare test [info procs test]] == 1} then {source defs}
  30.  
  31. # The following code is needed because some versions of SCO Unix have
  32. # a round-off error in sprintf which would cause some of the tests to
  33. # fail.  Someday I hope this code shouldn't be necessary (code added
  34. # 9/9/91).
  35.  
  36. set roundOffBug 0
  37. if {"[format %7.1e  68.514]" == "6.8e+01"} {
  38.     puts stdout "Note: this system has a sprintf round-off bug, some tests skipped\n"
  39.     set roundOffBug 1
  40. }
  41.  
  42. test format-1.1 {integer formatting} {
  43.     format "%*d %d %d %d" 6 34 16923 -12 -1
  44. } {    34 16923 -12 -1}
  45. if $atBerkeley {
  46.     test format-1.2 {integer formatting} {
  47.     format "%4d %4d %4d %4d %d %#x %#X" 6 34 16923 -12 -1 0 0
  48.     } {   6   34 16923  -12 -1 0 0}
  49. }
  50.  
  51. # %u output depends on word length, so don't run these tests except
  52. # at Berkeley, where word length is known.
  53.  
  54. if $atBerkeley {
  55.     test format-1.3 {integer formatting} {
  56.     format "%4u %4u %4u %4u %d %#o" 6 34 16923 -12 -1 0
  57.     } {   6   34 16923 4294967284 -1 0}
  58. }
  59. test format-1.4 {integer formatting} {
  60.     format "%-4d %-4i %-4d %-4ld" 6 34 16923 -12 -1
  61. } {6    34   16923 -12 }
  62. test format-1.5 {integer formatting} {
  63.     format "%04d %04d %04d %04i" 6 34 16923 -12 -1
  64. } {0006 0034 16923 -012}
  65. test format-1.6 {integer formatting} {
  66.     format "%00*d" 6 34
  67. } {000034}
  68.  
  69. # Printing negative numbers in hex or octal format depends on word
  70. # length; only run at Berkeley where word length is known.
  71.  
  72. if $atBerkeley {
  73.     test format-1.7 {integer formatting} {
  74.     format "%4x %4x %4x %4x" 6 34 16923 -12 -1
  75.     } {   6   22 421b fffffff4}
  76.     test format-1.8 {integer formatting} {
  77.     format "%#x %#X %#X %#x" 6 34 16923 -12 -1
  78.     } {0x6 0X22 0X421B 0xfffffff4}
  79.     test format-1.9 {integer formatting} {
  80.     format "%#20x %#20x %#20x %#20x" 6 34 16923 -12 -1
  81.     } {                 0x6                 0x22               0x421b           0xfffffff4}
  82.     test format-1.10 {integer formatting} {
  83.     format "%-#20x %-#20x %-#20x %-#20x" 6 34 16923 -12 -1
  84.     } {0x6                  0x22                 0x421b               0xfffffff4          }
  85.     test format-1.11 {integer formatting} {
  86.     format "%-#20o %#-20o %#-20o %#-20o" 6 34 16923 -12 -1
  87.     } {06                   042                  041033               037777777764        }
  88. }
  89.  
  90. test format-2.1 {string formatting} {
  91.     format "%s %s %c %s" abcd {This is a very long test string.} 120 x
  92. } {abcd This is a very long test string. x x}
  93. test format-2.2 {string formatting} {
  94.     format "%20s %20s %20c %20s" abcd {This is a very long test string.} 120 x
  95. } {                abcd This is a very long test string.                    x                    x}
  96. test format-2.3 {string formatting} {
  97.     format "%.10s %.10s %c %.10s" abcd {This is a very long test string.} 120 x
  98. } {abcd This is a  x x}
  99. test format-2.4 {string formatting} {
  100.     format "%s %s %% %c %s" abcd {This is a very long test string.} 120 x
  101. } {abcd This is a very long test string. % x x}
  102.  
  103. test format-3.1 {e and f formats} {
  104.     format "%e %e %e %e" 34.2e12 68.514 -.125 -16000. .000053
  105. } {3.420000e+13 6.851400e+01 -1.250000e-01 -1.600000e+04}
  106. test format-3.2 {e and f formats} {
  107.     format "%20e %20e %20e %20e" 34.2e12 68.514 -.125 -16000. .000053
  108. } {        3.420000e+13         6.851400e+01        -1.250000e-01        -1.600000e+04}
  109. if {!$roundOffBug} {
  110.     test format-3.3 {e and f formats} {
  111.     format "%.1e %.1e %.1e %.1e" 34.2e12 68.514 -.126 -16000. .000053
  112.     } {3.4e+13 6.9e+01 -1.3e-01 -1.6e+04}
  113.     test format-3.4 {e and f formats} {
  114.     format "%020e %020e %020e %020e" 34.2e12 68.514 -.126 -16000. .000053
  115.     } {000000003.420000e+13 000000006.851400e+01 -00000001.260000e-01 -00000001.600000e+04}
  116.     test format-3.5 {e and f formats} {
  117.     format "%7.1e %7.1e %7.1e %7.1e" 34.2e12 68.514 -.126 -16000. .000053
  118.     } {3.4e+13 6.9e+01 -1.3e-01 -1.6e+04}
  119.     test format-3.6 {e and f formats} {
  120.     format "%f %f %f %f" 34.2e12 68.514 -.125 -16000. .000053
  121.     } {34200000000000.000000 68.514000 -0.125000 -16000.000000}
  122. }
  123. test format-3.7 {e and f formats} {
  124.     format "%.4f %.4f %.4f %.4f %.4f" 34.2e12 68.514 -.125 -16000. .000053
  125. } {34200000000000.0000 68.5140 -0.1250 -16000.0000 0.0001}
  126. test format-3.8 {e and f formats} {
  127.     format "%.4e %.5e %.6e" -9.99996 -9.99996 9.99996
  128. } {-1.0000e+01 -9.99996e+00 9.999960e+00}
  129. test format-3.9 {e and f formats} {
  130.     format "%.4f %.5f %.6f" -9.99996 -9.99996 9.99996
  131. } {-10.0000 -9.99996 9.999960}
  132. test format-3.10 {e and f formats} {
  133.     format "%20f %-20f %020f" -9.99996 -9.99996 9.99996
  134. } {           -9.999960 -9.999960            0000000000009.999960}
  135. test format-3.11 {e and f formats} {
  136.     format "%-020f %020f" -9.99996 -9.99996 9.99996
  137. } {-9.999960            -000000000009.999960}
  138. test format-3.12 {e and f formats} {
  139.     format "%.0e %#.0e" -9.99996 -9.99996 9.99996
  140. } {-1e+01 -1.e+01}
  141. test format-3.13 {e and f formats} {
  142.     format "%.0f %#.0f" -9.99996 -9.99996 9.99996
  143. } {-10 -10.}
  144. test format-3.14 {e and f formats} {
  145.     format "%.4f %.5f %.6f" -9.99996 -9.99996 9.99996
  146. } {-10.0000 -9.99996 9.999960}
  147. test format-3.15 {e and f formats} {
  148.     format "%3.0f %3.0f %3.0f %3.0f" 1.0 1.1 1.01 1.001
  149. } {  1   1   1   1}
  150. test format-3.16 {e and f formats} {
  151.     format "%3.1f %3.1f %3.1f %3.1f" 0.0 0.1 0.01 0.001
  152. } {0.0 0.1 0.0 0.0}
  153.  
  154. test format-4.1 {g-format} {
  155.     format "%.3g" 12341.0
  156. } {1.23e+04}
  157. test format-4.2 {g-format} {
  158.     format "%.3G" 1234.12345
  159. } {1.23E+03}
  160. test format-4.3 {g-format} {
  161.     format "%.3g" 123.412345
  162. } {123}
  163. test format-4.4 {g-format} {
  164.     format "%.3g" 12.3412345
  165. } {12.3}
  166. test format-4.5 {g-format} {
  167.     format "%.3g" 1.23412345
  168. } {1.23}
  169. test format-4.6 {g-format} {
  170.     format "%.3g" 1.23412345
  171. } {1.23}
  172. test format-4.7 {g-format} {
  173.     format "%.3g" .123412345
  174. } {0.123}
  175. test format-4.8 {g-format} {
  176.     format "%.3g" .012341
  177. } {0.0123}
  178. test format-4.9 {g-format} {
  179.     format "%.3g" .0012341
  180. } {0.00123}
  181. test format-4.10 {g-format} {
  182.     format "%.3g" .00012341
  183. } {0.000123}
  184. test format-4.11 {g-format} {
  185.     format "%.3g" .00001234
  186. } {1.23e-05}
  187. test format-4.12 {g-format} {
  188.     format "%.4g" 9999.6
  189. } {1e+04}
  190. test format-4.13 {g-format} {
  191.     format "%.4g" 999.96
  192. } {1000}
  193. test format-4.14 {g-format} {
  194.     format "%.3g" 1.0
  195. } {1}
  196. test format-4.15 {g-format} {
  197.     format "%.3g" .1
  198. } {0.1}
  199. test format-4.16 {g-format} {
  200.     format "%.3g" .01
  201. } {0.01}
  202. test format-4.17 {g-format} {
  203.     format "%.3g" .001
  204. } {0.001}
  205. test format-4.19 {g-format} {
  206.     format "%.3g" .00001
  207. } {1e-05}
  208. test format-4.20 {g-format} {
  209.     format "%#.3g" 1234.0
  210. } {1.23e+03}
  211. test format-4.21 {g-format} {
  212.     format "%#.3G" 9999.5
  213. } {1.00E+04}
  214.  
  215. test format-5.1 {floating-point zeroes} {
  216.     format "%e %f %g" 0.0 0.0 0.0 0.0
  217. } {0.000000e+00 0.000000 0}
  218. test format-5.2 {floating-point zeroes} {
  219.     format "%.4e %.4f %.4g" 0.0 0.0 0.0 0.0
  220. } {0.0000e+00 0.0000 0}
  221. test format-5.3 {floating-point zeroes} {
  222.     format "%#.4e %#.4f %#.4g" 0.0 0.0 0.0 0.0
  223. } {0.0000e+00 0.0000 0.000}
  224. test format-5.4 {floating-point zeroes} {
  225.     format "%.0e %.0f %.0g" 0.0 0.0 0.0 0.0
  226. } {0e+00 0 0}
  227. test format-5.5 {floating-point zeroes} {
  228.     format "%#.0e %#.0f %#.0g" 0.0 0.0 0.0 0.0
  229. } {0.e+00 0. 0.}
  230. test format-5.6 {floating-point zeroes} {
  231.     format "%3.0f %3.0f %3.0f %3.0f" 0.0 0.0 0.0 0.0
  232. } {  0   0   0   0}
  233. test format-5.7 {floating-point zeroes} {
  234.     format "%3.0f %3.0f %3.0f %3.0f" 1.0 1.1 1.01 1.001
  235. } {  1   1   1   1}
  236. test format-5.8 {floating-point zeroes} {
  237.     format "%3.1f %3.1f %3.1f %3.1f" 0.0 0.1 0.01 0.001
  238. } {0.0 0.1 0.0 0.0}
  239.  
  240. test format-6.1 {various syntax features} {
  241.     format "%*.*f" 12 3 12.345678901
  242. } {      12.346}
  243. test format-6.2 {various syntax features} {
  244.     format "%0*.*f" 12 3 12.345678901
  245. } {00000012.346}
  246. test format-6.3 {various syntax features} {
  247.     format "\*\t\\n"
  248. } {*    \n}
  249.  
  250. test format-7.1 {error conditions} {
  251.     catch format
  252. } 1
  253. test format-7.2 {error conditions} {
  254.     catch format msg
  255.     set msg
  256. } {wrong # args: should be "format formatString ?arg arg ...?"}
  257. test format-7.3 {error conditions} {
  258.     catch {format %*d}
  259. } 1
  260. test format-7.4 {error conditions} {
  261.     catch {format %*d} msg
  262.     set msg
  263. } {not enough arguments for all format specifiers}
  264. test format-7.5 {error conditions} {
  265.     catch {format %*.*f 12}
  266. } 1
  267. test format-7.6 {error conditions} {
  268.     catch {format %*.*f 12} msg
  269.     set msg
  270. } {not enough arguments for all format specifiers}
  271. test format-7.7 {error conditions} {
  272.     catch {format %*.*f 12 3}
  273. } 1
  274. test format-7.8 {error conditions} {
  275.     catch {format %*.*f 12 3} msg
  276.     set msg
  277. } {not enough arguments for all format specifiers}
  278. test format-7.9 {error conditions} {
  279.     list [catch {format %*d x 3} msg] $msg
  280. } {1 {expected integer but got "x"}}
  281. test format-7.10 {error conditions} {
  282.     list [catch {format %*.*f 2 xyz 3} msg] $msg
  283. } {1 {expected integer but got "xyz"}}
  284. test format-7.11 {error conditions} {
  285.     catch {format %d 2a}
  286. } 1
  287. test format-7.12 {error conditions} {
  288.     catch {format %d 2a} msg
  289.     set msg
  290. } {expected integer but got "2a"}
  291. test format-7.13 {error conditions} {
  292.     catch {format %c 2x}
  293. } 1
  294. test format-7.14 {error conditions} {
  295.     catch {format %c 2x} msg
  296.     set msg
  297. } {expected integer but got "2x"}
  298. test format-7.15 {error conditions} {
  299.     catch {format %f 2.1z}
  300. } 1
  301. test format-7.16 {error conditions} {
  302.     catch {format %f 2.1z} msg
  303.     set msg
  304. } {expected floating-point number but got "2.1z"}
  305. test format-7.17 {error conditions} {
  306.     catch {format ab%}
  307. } 1
  308. test format-7.18 {error conditions} {
  309.     catch {format ab% 12} msg
  310.     set msg
  311. } {format string ended in middle of field specifier}
  312. test format-7.19 {error conditions} {
  313.     catch {format %q x}
  314. } 1
  315. test format-7.20 {error conditions} {
  316.     catch {format %q x} msg
  317.     set msg
  318. } {bad field specifier "q"}
  319. test format-7.21 {error conditions} {
  320.     catch {format %d}
  321. } 1
  322. test format-7.22 {error conditions} {
  323.     catch {format %d} msg
  324.     set msg
  325. } {not enough arguments for all format specifiers}
  326.  
  327. test format-8.1 {long result} {
  328.     set a {1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}
  329.     format {1111 2222 3333 4444 5555 6666 7777 8888 9999 aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm nnnn oooo pppp qqqq rrrr ssss tttt uuuu vvvv wwww xxxx yyyy zzzz AAAA BBBB CCCC DDDD EEEE FFFF GGGG %s %s %s} $a $a $a
  330. } {1111 2222 3333 4444 5555 6666 7777 8888 9999 aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm nnnn oooo pppp qqqq rrrr ssss tttt uuuu vvvv wwww xxxx yyyy zzzz AAAA BBBB CCCC DDDD EEEE FFFF GGGG 1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}
  331.  
  332. if $atBerkeley {
  333.     test format-9.1 {"h" format specifier} {
  334.     format %hd 0xffff
  335.     } -1
  336.     test format-9.2 {"h" format specifier} {
  337.     format %hx 0x10fff
  338.     } fff
  339.     test format-9.3 {"h" format specifier} {
  340.     format %hd 0x10000
  341.     } 0
  342. }
  343.  
  344. test format-10.1 {XPG3 %$n specifiers} {
  345.     format {%2$d %1$d} 4 5
  346. } {5 4}
  347. test format-10.2 {XPG3 %$n specifiers} {
  348.     format {%2$d %1$d %1$d %3$d} 4 5 6
  349. } {5 4 4 6}
  350. test format-10.3 {XPG3 %$n specifiers} {
  351.     list [catch {format {%2$d %3$d} 4 5} msg] $msg
  352. } {1 {"%n$" argument index out of range}}
  353. test format-10.4 {XPG3 %$n specifiers} {
  354.     list [catch {format {%2$d %0$d} 4 5 6} msg] $msg
  355. } {1 {"%n$" argument index out of range}}
  356. test format-10.5 {XPG3 %$n specifiers} {
  357.     list [catch {format {%d %1$d} 4 5 6} msg] $msg
  358. } {1 {cannot mix "%" and "%n$" conversion specifiers}}
  359. test format-10.6 {XPG3 %$n specifiers} {
  360.     list [catch {format {%2$d %d} 4 5 6} msg] $msg
  361. } {1 {cannot mix "%" and "%n$" conversion specifiers}}
  362. test format-10.7 {XPG3 %$n specifiers} {
  363.     list [catch {format {%2$d %3d} 4 5 6} msg] $msg
  364. } {1 {cannot mix "%" and "%n$" conversion specifiers}}
  365. test format-10.8 {XPG3 %$n specifiers} {
  366.     format {%2$*d %3$d} 1 10 4
  367. } {         4 4}
  368. test format-10.9 {XPG3 %$n specifiers} {
  369.     format {%2$.*s %4$d} 1 5 abcdefghijklmnop 44
  370. } {abcde 44}
  371. test format-10.10 {XPG3 %$n specifiers} {
  372.     list [catch {format {%2$*d} 4} msg] $msg
  373. } {1 {"%n$" argument index out of range}}
  374. test format-10.11 {XPG3 %$n specifiers} {
  375.     list [catch {format {%2$*d} 4 5} msg] $msg
  376. } {1 {"%n$" argument index out of range}}
  377. test format-10.12 {XPG3 %$n specifiers} {
  378.     list [catch {format {%2$*d} 4 5 6} msg] $msg
  379. } {0 {    6}}
  380.